package com.jk.vehicle.mini.util;



import com.jk.vehicle.core.exception.ServiceException;

import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

/**
 * 字符工具类
 *
 * @author KangJian
 * @date 2018/8/23
 */
public class StringHelper {

    /**
     * 获取值
     * @param obj
     * @return
     */
    public static String getObjectValue(Object obj) {
        return obj == null ? "" : obj.toString();
    }

    /**
     * 获取url的匹配正则表达式
     *
     * @param url
     * @return
     */
    public static String getUrlRegex(String url) {
        String uri = url;
        // 替换正则表达式中的特殊字符
        uri = uri.replace("\\", "\\\\");
        uri = uri.replace("$", "\\$");
        uri = uri.replace("(", "\\(");
        uri = uri.replace(")", "\\)");
        uri = uri.replace("*", "\\*");
        uri = uri.replace("+", "\\+");
        uri = uri.replace(".", "\\.");
        uri = uri.replace("[", "\\[");
        uri = uri.replace("]", "\\]");
        uri = uri.replace("?", "\\?");
        uri = uri.replace("^", "\\^");
        uri = uri.replace("{", "\\{");
        uri = uri.replace("}", "\\}");
        // 替换自定义{**}通配符
        uri = uri.replace("\\{\\*\\*\\}", "[\\s\\S]*?");
        // 替换自定义{*}通配符
        uri = uri.replace("\\{\\*\\}", "[a-zA-Z\\d]+");
        String testUri = uri.replace("[\\s\\S]*?", "");
        if (testUri.contains("*")) {
            throw new ServiceException("url格式错误，如需配置通配符*，请使用{*}代表任意数字及字母匹配，{**}代表任意字符匹配");
        }
        String regEx = "^" + uri + "$";
        try {
            Pattern.compile(regEx);
        } catch (PatternSyntaxException e) {
            throw new ServiceException("url格式错误，请检查");
        }
        return regEx;
    }

	/**
	 * unicode 转中文
	 * @param unicode 待转换编码
	 * @return 中文值
	 */
	public static String unicodeToCn(String unicode) {
		/** 以 \ u 分割，因为java注释也能识别unicode，因此中间加了一个空格*/
		String[] strs = unicode.split("\\\\u");
		String returnStr = "";
		// 由于unicode字符串以 \ u 开头，因此分割出的第一个字符是""。
		for (int i = 1; i < strs.length; i++) {
			returnStr += (char) Integer.valueOf(strs[i], 16).intValue();
		}
		return returnStr;
	}
}
